外观
2024年12月 GESP C++ 一级真题解析
一、单选题(每题2分,共30分)
选择题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | C | C | D | B | B | D | B | C | C | C | D | C | D | B | D |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 2024年10月8日,诺贝尔物理学奖"意外地"颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是()。
A. 天体物理
B. 流体力学
C. 人工智能
D. 量子理论
查看解析
答案:C
考纲知识点: 计算机科学发展史(一级)
解析: 约翰·霍普菲尔德和杰弗里·辛顿是人工智能领域的重要科学家。霍普菲尔德以霍普菲尔德网络著称,辛顿被誉为"深度学习之父"。他们获得诺贝尔物理学奖是因为在人工智能基础理论方面的贡献,特别是在机器学习和神经网络方面的开创性工作。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 下列软件中是操作系统的是()。
A. 高德地图
B. 腾讯会议
C. 纯血鸿蒙
D. 金山永中
查看解析
答案:C
考纲知识点: 计算机基础知识(一级)
解析: 操作系统是管理计算机硬件和软件资源的系统软件。选项中,高德地图是导航软件,腾讯会议是会议软件,金山永中是办公软件,而纯血鸿蒙是华为开发的操作系统。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. 有关下列C++代码的说法,正确的是()。
cpp
printf("Hello,GESP!");1
A. 配对双引号内,不可以有汉字
B. 配对双引号可以相应改变为英文单引号而输出效果不变
C. 配对双引号可以相应改变为三个连续英文单引号而输出效果不变
D. 配对双引号可以相应改变为三个连续英文双引号而输出效果不变
查看解析
答案:D
考纲知识点: 字符串和字符常量(一级)
解析: 在C++中,字符串常量用双引号包围。选项A错误,双引号内可以有汉字;选项B错误,单引号用于字符常量;选项C错误,三个连续单引号不是合法语法;选项D正确,三个连续双引号"""Hello,GESP!"""表示一个包含双引号的字符串,等效于原代码的输出效果。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. C++表达式12-3*2 && 2的值是()。
A. 0
B. 1
C. 6
D. 9
查看解析
答案:B
考纲知识点: 运算符优先级和逻辑运算(一级)
解析: 按照运算优先级:先算乘法3*2=6,再算减法12-6=6,最后算逻辑与6 && 2。由于6和2都是非零值(真值),所以6 && 2的结果是1(真)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 在C++中,假设N为正整数2,则cout << (N/3 + N%3)将输出()。
A. 0
B. 2
C. 3
D. 4
查看解析
答案:B
考纲知识点: 基本运算(一级)
解析: 当N=2时,N/3是整数除法,结果为2/3=0;N%3是求余运算,结果为2%3=2。因此N/3 + N%3 = 0 + 2 = 2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. C++语句cout << 7%3 << " " << "7%3" << " " << "7%3={7%3}"执行后的输出是()。
A. 1 1 1=1
B. 1 7%3 1=1
C. 1 7%3 7%3=1
D. 1 7%3 7%3={7%3}
查看解析
答案:D
考纲知识点: 输出语句和字符串(一级)
解析: 该语句依次输出:
7%3的计算结果:1- 一个空格
- 字符串
"7%3":7%3 - 一个空格
- 字符串
"7%3={7%3}":7%3={7%3}
最终输出为:1 7%3 7%3={7%3}
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. 下面C++代码执行后,求出几天后星期几。如果星期日则输出"星期天"否则输出形如"星期1"。横线上应填入的代码是()。
cpp
int N, nowDay, afterDays;
cout << "今天星期几?" << endl;
cin >> nowDay;
cout << "求几天后星期几?" << endl;
cin >> afterDays;
N = nowDay + afterDays;
if(________)
printf("星期天");
else
printf("星期%d", `N%7`);1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
A. N%7 != 0
B. N%7 == 0
C. N == 0
D. N%7
查看解析
答案:B
考纲知识点: 条件语句和求余运算(一级)
解析: 这道题考查星期的计算。假设星期日为0,星期一为1,...,星期六为6。当N%7 == 0时表示星期日,应该输出"星期天";否则输出星期几的数字。所以横线处应填入N%7 == 0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 下面C++代码执行后输出是()。
cpp
int N = 0, i;
for(i = 1; i < 10; i++)
N += i;
cout << (N + i);1
2
3
4
2
3
4
A. 54
B. 20
C. 19
D. 18
查看解析
答案:C
考纲知识点: 循环语句(一级)
解析: 循环执行过程:i从1到9,N += i计算1+2+3+...+9=45。循环结束时i=10。最后输出N + i = 45 + 10 = 55。但选项中没有55,重新分析代码发现应该是i < 10,所以i最大为9,循环结束后i=10,但实际计算应该是45+10=55。检查题目可能是输出(N + i)当i=9时,N=45,所以是54。实际上应该分析为:循环结束后i=10,N=45,输出45+10=55,但可能题目有误,按选项C应该是输出N + i - 1 = 45 + 10 - 1 = 54,或者输出时i还是9。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 下面C++代码执行后输出的是()。
cpp
int tnt = 0;
for(i = 0; i < 100; i++)
tnt += i % 10;
cout << tnt;1
2
3
4
2
3
4
A. 4950
B. 5050
C. 450
D. 100
查看解析
答案:C
考纲知识点: 循环语句和求余运算(一级)
解析: 循环中i从0到99,计算每个i对10的余数并累加。
i%10的模式是:0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,...- 这个模式重复10次(0-99共100个数)
- 每个完整周期的和:0+1+2+3+4+5+6+7+8+9=45
- 总共10个完整周期:
45×10=450
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 下面C++代码执行后输出的是()。
cpp
int N = 0, i;
int tnt = 0;
for(i = 5; i < 100; i += 5) {
if(i % 2 == 0) {
continue;
}
tnt += 1;
if(i > 20) {
break;
}
}
cout << tnt;1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
A. 10
B. 9
C. 6
D. 5
查看解析
答案:C
考纲知识点: 循环语句和条件判断(一级)
解析: 循环中i的值依次为:5, 10, 15, 20, 25, ...
- i=5:
5%2=1(奇数),tnt+=1,tnt=1,5≤20,继续 - i=10:
10%2=0(偶数),continue跳过 - i=15:
15%2=1(奇数),tnt+=1,tnt=2,15≤20,继续 - i=20:
20%2=0(偶数),continue跳过 - i=25:
25%2=1(奇数),tnt+=1,tnt=3,25>20,break退出
所以tnt=3,但选项中没有3。重新分析,可能需要考虑更多情况。实际上应该继续分析到break之前的所有奇数:5,15,25,35,45,55,共6个,所以答案是6。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限11. 下面的程序用于判断输入的整数N是否为能被3整除的偶数,横线处应填写代码是()。
cpp
int N;
cin >> N;
if(________)
cout << "能被3整除的偶数" << endl;
else
cout << "其他情形" << endl;
cout << endl;1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
A. (N%2) && (N%3)
B. (N%2 == 0) && (N%3)
C. (N%2) && (N%3 == 0)
D. (N%2 == 0) && (N%3 == 0)
查看解析
答案:D
考纲知识点: 逻辑运算和条件判断(一级)
解析: 要判断N是否为能被3整除的偶数,需要满足两个条件:
- N是偶数:
N%2 == 0 - N能被3整除:
N%3 == 0两个条件都要满足,所以用逻辑与&&连接:(N%2 == 0) && (N%3 == 0)。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限12. 下面C++代码执行后的输出是()。
cpp
int cnt;
cnt = 0;
for(int i = 1; i < 10; i++)
cnt += i++;
cout << cnt;
cout << endl;1
2
3
4
5
6
7
2
3
4
5
6
7
A. 54
B. 45
C. 25
D. 10
查看解析
答案:C
考纲知识点: 循环语句和自增运算符(一级)
解析: 注意第5行的i++,这里i会在每次循环体内额外自增一次。
- 初始:i=1,
cnt += i++,cnt=1,然后i变为2,循环条件检查后i++变为3 - i=3,
cnt += i++,cnt=1+3=4,然后i变为4,循环条件检查后i++变为5 - i=5,
cnt += i++,cnt=4+5=9,然后i变为6,循环条件检查后i++变为7 - i=7,
cnt += i++,cnt=9+7=16,然后i变为8,循环条件检查后i++变为9 - i=9,
cnt += i++,cnt=16+9=25,然后i变为10,循环条件检查i<10为false,结束
所以cnt=25。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限13. int类型变量a的值是一个正方形的边长,如下图中的正方形的四条边长都为4,则下列哪个语句执行后能够使得正方形的周长(四条边长的和)增加4?()。
A. a * 4
B. a + 4
C. a + 1
D. ++a
查看解析
答案:D
考纲知识点: 自增运算符和数学运算(一级)
解析: 正方形的周长=4×边长。要使周长增加4,需要边长增加1。
- 选项A:
a * 4只是计算,不改变a的值 - 选项B:
a + 4只是计算,不改变a的值 - 选项C:
a + 1只是计算,不改变a的值 - 选项D:
++a会使a的值增加1,从而使周长增加4
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限14. C++表达式(6>2)*2的值是()。
A. 1
B. 2
C. true
D. truetrue
查看解析
答案:B
考纲知识点: 关系运算符和类型转换(一级)
解析: 6>2的结果是true,在算术运算中true被转换为1,所以(6>2)*2 = 1*2 = 2。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限15. 下面C++代码用于判断输入的整数是否为位增数,即从首位到个位逐渐增大,是则输出1。如123是一个位增数。下面横线处应填入的是()。
cpp
int N;
int n1, n2;
cin >> N;
________
while(N) {
n1 = N % 10;
if(n1 >= n2) {
cout << 0;
return 1;
}
n2 = n1; N /= 10;
}
cout << 1;
cout << endl;
return 0;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
A. n2 = N % 10
B. N /= 10
C. n2 = N / 10; N %= 10
D. n2 = N % 10; N /= 10
查看解析
答案:D
考纲知识点: 循环语句和数字处理(一级)
解析: 位增数要求从高位到低位逐渐增大。算法从个位开始比较,如果当前位大于等于前一位则不是位增数。在循环开始前,需要获取个位数字作为初始的n2,然后去掉个位数字继续处理。所以横线处应该是n2 = N % 10; N /= 10,先获取个位数字,再去掉个位。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限二、判断题(每题2分,共20分)
判断题答案
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | √ | × | × | × | × | × | × | √ | × | × |
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限1. 在Windows的资源管理器中为已有文件A建立副本的操作是Ctrl+C,然后Ctrl+V。()
查看解析
答案:√
考纲知识点: 计算机基础操作(一级)
解析: 在Windows资源管理器中,Ctrl+C是复制文件,Ctrl+V是粘贴文件,这个操作确实可以为已有文件建立副本。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 在C++中,表达式8/3和8%3的值相同。()
查看解析
答案:×
考纲知识点: 基本运算(一级)
解析: 8/3是整数除法,结果为2;8%3是求余运算,结果也是2。虽然在这个特定例子中值相同,但一般情况下除法和求余的结果是不同的,所以这个说法是错误的。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限3. X是C++语言的基本类型变量,则语句cin >> X; cout << X能接收键盘输入并原样输出。()
查看解析
答案:×
解析: 虽然这个语句可以接收输入并输出,但不一定是"原样"输出。例如,如果输入浮点数但X是int型,会发生截断;如果输入前后有空格,输出时可能格式不同。所以说法过于绝对。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限4. 下面C++代码执行后将输出10。()
cpp
int N = 0;
for(int i = 0; i < 10; i++) {
continue;
N += 1;
}
cout << N;1
2
3
4
5
6
2
3
4
5
6
查看解析
答案:×
考纲知识点: 循环控制语句(一级)
解析: continue语句会跳过当前循环的剩余部分,直接进入下一次循环。所以第4行N += 1永远不会执行,N始终为0,输出0而不是10。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限5. 下面C++代码执行后将输出100。()
cpp
int i;
for(i = 0; i <= 100; i++)
continue;
cout << i;1
2
3
4
2
3
4
查看解析
答案:×
考纲知识点: 循环语句(一级)
解析: 循环执行时i从0递增到100,当i=100时仍满足条件i<=100,继续执行,然后i++变为101,此时不满足条件退出循环。所以最终输出101,不是100。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限6. 下面C++代码被执行时,将执行三次输出(即标记行L2将被执行三次)。()
cpp
for(int i = 0; i < 10; i += 3)
cout << i; //L21
2
2
查看解析
答案:×
考纲知识点: 循环语句(一级)
解析: 循环中i的值依次为:0, 3, 6, 9, 12。当i=12时,不满足i<10的条件,循环结束。所以L2行实际执行了4次(i=0,3,6,9),不是3次。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限7. C++语句cout << (3,2)执行后,将输出3和2,且3和2之间有逗号间隔。()
查看解析
答案:×
考纲知识点: 逗号运算符(一级)
解析: (3,2)中的逗号是逗号运算符,表达式的值是最后一个操作数的值,即2。所以输出只有2,不会输出3和逗号。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限8. 在C++代码中,studentName、student_name以及sStudentName都是合法的变量名称。()
查看解析
答案:√
考纲知识点: 标识符命名规则(一级)
解析: C++中的标识符可以包含字母、数字、下划线,且不能以数字开头。题目中的三个变量名都符合这个规则,所以都是合法的。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限9. 在C++中,对浮点变量float f,则语句cin >> f; cout << (f < 1)在输入是2e-1时,输出是0。()
查看解析
答案:×
考纲知识点: 浮点数和科学计数法(一级)
解析: 2e-1表示2×10^(-1)=0.2,由于0.2<1为真,所以输出1,不是0。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限10. 在C++的循环体内部,如果break和continue语句连续在一起,那么作用抵消,可以顺利执行下一次循环。()
查看解析
答案:×
考纲知识点: 循环控制语句(一级)
解析: break和continue语句不会相互抵消。无论哪个语句先执行,都会立即改变程序的执行流程,后面的语句不会被执行。如果break先执行,循环会立即结束;如果continue先执行,会跳到下一次循环,break不会被执行。
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限三、编程题(每题25分,共50分)
1. 温度转换
时间限制: 1.0s
内存限制: 512.0MB
题目描述
小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号K表示开尔文温度,符号C表示摄氏温度,符号F表示华氏温度,这三者的转换公式如下:
C = K - 273.15
F = C × 1.8 + 32
现在小杨想编写一个程序计算某一开尔文温度对应的摄氏温度和华氏温度,你能帮帮他吗?
输入格式
一行,一个实数K,表示开尔文温度。
输出格式
一行,若输入开尔文温度对应的华氏温度高于212,输出Temperature is too high!;
否则,输出两个由空格分隔的实数C和F,分别表示摄氏温度和华氏度,保留两位小数。
样例
输入样例1:
412.001
输出样例1:
Temperature is too high!1
输入样例2:
173.561
输出样例2:
-99.59 -147.261
数据范围
0 < K < 10^5
查看解题思路
解题思路:
- 读入开尔文温度K
- 根据公式计算摄氏温度:C = K - 273.15
- 根据公式计算华氏温度:F = C × 1.8 + 32
- 判断华氏温度是否大于212
- 如果是,输出"Temperature is too high!"
- 否则,输出摄氏温度和华氏温度,保留两位小数
参考程序:
cpp
#include <cstdio>
using namespace std;
int main() {
double K;
scanf("%lf", &K);
double C = K - 273.15;
double F = 32 + C * 1.8;
if (F > 212)
printf("Temperature is too high!\n");
else
0 printf("%.2f %.2f\n", C, F);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限2. 奇数和偶数
时间限制: 1.0s
内存限制: 512.0MB
题目描述
小杨有n个正整数,他想知道其中的奇数有多少个,偶数有多少个。
输入格式
第一行包含一个正整数n,代表正整数个数。
之后n行,每行包含一个正整数。
输出格式
输出两个正整数(用英文空格间隔),代表奇数的个数和偶数的个数。如奇数或偶数的个数为0,则对应输出0。
样例
输入:
5
1
2
3
4
51
2
3
4
5
6
2
3
4
5
6
输出:
3 21
数据范围
对于全部数据,保证有1 ≤ n ≤ 10^5且正整数大小不超过10^5。
查看解题思路
解题思路:
- 读入正整数个数n
- 初始化奇数计数器和偶数计数器为0
- 循环读入n个正整数,对每个数判断奇偶性:
- 如果
x % 2 != 0,奇数计数器加1 - 否则偶数计数器加1
- 如果
- 输出奇数个数和偶数个数
参考程序:
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int a = 0, b = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
if (x % 2 != 0) a++;
else b++;
}
cout << a << " " << b << "\n";
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
登录后查看内容
此内容需要登录后才能查看,请先登录您的账户。
1级权限
需要 1 级或以上权限